package cn.wizzer.app.crown.modules.services;

import cn.wizzer.app.crown.modules.models.CrownBet;
import cn.wizzer.app.crown.modules.models.CrownMatch;
import cn.wizzer.app.crown.modules.models.enums.BetsEnum;
import cn.wizzer.app.crown.modules.models.enums.MatchStageEnum;
import cn.wizzer.app.crown.modules.models.vo.CrownBetVO;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;

import java.util.Date;
import java.util.List;

public interface CrownMatchService extends BaseService<CrownMatch> {

    /**
     * 后台赛事列表
     *
     * @param searchKeyword 搜索
     * @param stage         赛事阶段
     * @param start         开赛时间区间
     * @param end           开赛时间区间
     * @param pageNumber    页数
     * @param pageSize      页面容量
     * @return              Pagination
     */
    Pagination listPage(String searchKeyword, String stage, Date start, Date end, int pageNumber, int pageSize);


    /**
     * 首页热门投注，取‘已完成金额‘前10
     *
     * @param timezone 时区id
     * @return List
     */
    List<CrownBetVO> hotBets(String timezone);


    /**
     * 根据联赛名、主队名、客队名、比赛日期判断查询比赛
     *
     * @param league   联赛名
     * @param mbTeam   主队名
     * @param tgName   客队名
     * @param dateTime 比赛日期
     * @return CrownMatch
     */
    CrownMatch queryByTeamInfo(String league, String mbTeam, String tgName, Date dateTime);


    /**
     * 联赛列表
     *
     * @param stage    今日、早盘
     * @param pageNo   页码
     * @param pageSize 页面容量
     * @return Pagination
     */
    Pagination leagueList(MatchStageEnum stage, String timezone, int pageNo, int pageSize);

    /**
     * 获取赛事及其玩法列表
     *
     * @param stage      今日、早盘
     * @param leagueList 联赛集合
     * @param timezone
     * @param pageNo     页码
     * @param pageSize   页面容量
     * @return Pagination
     */
    Pagination matchList(MatchStageEnum stage, List<String> leagueList, String timezone, int pageNo, int pageSize);


    /**
     * 获取赛事玩法
     *
     * @param betType 投资类型
     * @param id      赛事id
     * @return CrownMatch
     */
    CrownMatch composeMatch(BetsEnum betType, String id);

    /**
     * 赛果列表
     *
     * @param start    开始日期
     * @param end      结束日期
     * @param pageNo   页码
     * @param pageSize 页面容量
     * @return Pagination
     */
    Pagination resultList(String timezone, Long start, Long end, int pageNo, int pageSize);


    /**
     * 单条赛果
     *
     * @param id
     * @return
     */
    CrownMatch result(String id);

    /**
     * 爬取赛果
     *
     * @param startTime 开始时间(毫秒级)
     * @param endTime   结束时间(毫秒级)
     */
    void crawlMatchResult(Long startTime, Long endTime);


    /**
     * 比赛数量统计
     *
     * @param timezone
     * @return List
     */
    List matchCount(String timezone);


    /**
     * 虚拟投资数据
     */
    void mockBets();


    /**
     * 重新连接爬虫服务
     */
    void reconnect();


    /**
     * 处理赔率(皇冠原始赔率 -> 利率)
     *
     * @param bet
     */
    void handleRate(CrownBet bet);
}
